op {
  graph_op_name: "UniformRequantize"
  visibility: HIDDEN
  in_arg {
    name: "input"
    description: <<END
Must be a Tensor of Tin.
END
  }
  in_arg {
    name: "input_scales"
    description: <<END
The float value(s) used as scale(s) when quantizing original data that `input` represents.
Must be a scalar Tensor if quantization_axis is -1 (per-tensor quantization), otherwise 1D Tensor of size (input.dim_size(quantization_axis),) (per-axis quantization).
END
  }
  in_arg {
    name: "input_zero_points"
    description: <<END
The int32 value(s) used as zero_point(s) when quantizing original data that `input` represents.
Same shape condition as scales.
END
  }
  in_arg {
    name: "output_scales"
    description: <<END
The float value(s) to use as new scale(s) to quantize original data that `input` represents.
Must be a scalar Tensor if quantization_axis is -1 (per-tensor quantization), otherwise 1D Tensor of size (input.dim_size(quantization_axis),) (per-axis quantization).
END
  }
  in_arg {
    name: "output_zero_points"
    description: <<END
The int32 value(s) to use as new zero_point(s) to quantize original data that `input` represents.
Same shape condition as scales.
END
  }
  out_arg {
    name: "output"
    description: <<END
The output quantized Tensor of Tout, whose shape is same as input.
END
  }
  attr {
    name: "Tin"
    description: <<END
The type of input Tensor. A tf.DType from: tf.qint8, tf.qint32
END
  }
  attr {
    name: "Tout"
    description: <<END
The type of output Tensor. A tf.DType from: tf.qint8, tf.qint32
END
  }
  attr {
    name: "input_quantization_axis"
    description: <<END
The quantization axis that was used when quantizing original data that `input` represents.
Indicates the dimension index of the tensor where per-axis quantization is applied for the slices along that dimension.
If set to -1 (default), this indicates per-tensor quantization. Otherwise, it must be set within range [0, input.dims()).
END
  }
  attr {
    name: "input_quantization_min_val"
    description: <<END
The quantization min value that was used when quantizing original data that `input` represents.
The purpose of this attribute is typically (but not limited to) to indicate narrow range, where this is set to:
`(Tin lowest) + 1` if narrow range, and `(Tin lowest)` otherwise.
For example, if Tin is qint8, this is set to -127 if narrow range quantized or -128 if not.
END
  }
  attr {
    name: "input_quantization_max_val"
    description: <<END
The quantization max value that was used when quantizing original data that `input` represents.
The purpose of this attribute is typically (but not limited to) indicate narrow range, where this is set to:
`(Tout max)` for both narrow range and not narrow range.
For example, if Tin is qint8, this is set to 127.
END
  }
  attr {
    name: "output_quantization_axis"
    description: <<END
The new quantization axis to use to quantize original data that `input` represents.
END
  }
  attr {
    name: "output_quantization_min_val"
    description: <<END
The new quantization min value to quantize original data that `input` represents.
END
  }
  attr {
    name: "output_quantization_max_val"
    description: <<END
The new quantization max value to quantize original data that `input` represents.
END
  }
  summary: "Given quantized tensor `input`, requantize it with new quantization parameters."
  description: <<END
Given quantized tensor `input`, which was quantized using {input_scales, input_zero_points, input_quantization_axis, input_quantization_min_val, input_quantization_max_val},
requantize it to a tensor, which is quantized using {output_scales, output_zero_points, output_quantization_axis, output_quantization_min_val, output_quantization_max_val}.
The requantization is done by using the formula:
output_quantized_data = clip(
  (input_quantized_data - input_zero_point) * (input_scale / output_scale) + output_zero_point,
  output_quantization_min_val,
  output_quantization_max_val)

Per-tensor and per-axis quantization supported cases are followings:
* per-tensor -> per-tensor
* per-tensor -> per-axis
* per-axis -> per-axis where input_quantization_axis equals output_quantization_axis.
i.e. At least one among input_quantization_axis and output_quantization_axis must be -1, or two must be equal.
END
}
